// 导入axios
import axios from 'axios'
// 导入Toast Toast === this.$toast
import { Toast } from 'vant'
// 导入删除token工具型方法
import { remoteToken, getToken } from '@/utils/token.js'
// 导入 路由router 在js中使用vue方法需要导入
import router from '@/router'
// 导入store
import store from '@/store'
// import Vue from 'vue'
// wwww
// Vue.prototype.$axios = axios

// axios.defaults.baseURL = 'http://47.106.228.28:1337'

// 使用axios的create方法修改默认配置

const _fetch = axios.create({
  baseURL: process.env.VUE_APP_URL
})

// 拦截器
// 请求拦截器
_fetch.interceptors.request.use(
  function (config) {
    // config就是所有的数据
    // 我需要token再加 不需要就不要加了
    if (config.needToken) {
      config.headers.authorization = `Bearer ${getToken('token')}`
    }
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)
// 响应拦截器
_fetch.interceptors.response.use(
  function (response) {
    // response就等同于login页面的res数据
    // 如果接口code === 200 正常返回
    // 如果不===200就提示一下 终止.then执行 return Promise.reject(error)
    /*
      token异常怎么处理？
        提示一下
        删除token
        修改登录状态为false
        跳转至登录页
        终止.then执行
    */
    if (response.data.code === 200) {
      return response
      // 这里表示token异常  401 表示token错误 403表示未登录 也就是没有token
    } else if (response.data.code === 401 || response.data.code === 403) {
      // 提示一下
      Toast.fail(response.data.message)
      // 删除token
      remoteToken('token')
      // 修改登录状态为false
      store.commit('setIsLogin', false)
      // 跳转登录页
      router.push('/login')
      // 终止.then执行
      return Promise.reject(new Error(response.data.message))
    } else {
      // 给个轻提示 验证码错误
      Toast.fail(response.data.message)
      // Promise.reject抛出了一个错误 终止.then执行 同时执行了.catch 并传参reject的值
      return Promise.reject(new Error(response.data.message))
    }
  },
  function (error) {
    return Promise.reject(error)
  }
)
export default _fetch
